package com.shujia.io_.three;

import org.junit.Test;

import java.io.*;

/*
字节输入流
 */
public class InputStreamDemo {


    @Test
    public void closeDemo2() {
        try (InputStream is = new FileInputStream("C:\\Users\\Thinkpad\\Desktop\\c.txt")) {
            byte[] bys = new byte[60];
            int len;// 每次读取到数组里的字节数
            while ((len = is.read(bys)) != -1) {
                String str = new String(bys, 0, len, "GBK");
                System.out.println(str);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


    @Test
    public void closeDemo() {
        InputStream is = null;
        try {
            is = new FileInputStream("file\\note.txt");

            byte[] bys = new byte[60];
            int len;// 每次读取到数组里的字节数
            while ((len = is.read(bys)) != -1) {
                String str = new String(bys, 0, len);
                System.out.println(str);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (is != null) {
                // 关闭资源
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }

    @Test
    public void test3() throws IOException {
        InputStream is = new FileInputStream("file\\note.txt");

        /*
        每次在读取数据到字节数组里面, 不要直接创建字符串,
        把数组里面的字节保存到内存里, 当所有的字节都读取完毕, 所有的数据都在内存
        最终把内存里面字节数组一次性创建字符串对象
         */
        // byte[] bys = new byte[6];
        // 字节数组一般习惯指定长度 1024, 刚好是1kb
        byte[] bys = new byte[1024];
        // 往内存里面写数组
        ByteArrayOutputStream baos = new ByteArrayOutputStream();

        int len;// 每次读取到数组里的字节数
        while ((len = is.read(bys)) != -1) {
            baos.write(bys, 0, len);
        }
//        baos.toByteArray();
        // String result = new String(baos.toByteArray());

        // 从写了toString方法, 使用内部数据创建String并返回
        String result = baos.toString();
        System.out.println(result);


    }

    @Test
    public void test2() throws IOException {
        InputStream is = new FileInputStream("file\\note.txt");

        byte[] bys = new byte[60];
        int len;// 每次读取到数组里的字节数
        while ((len = is.read(bys)) != -1) {
//            String str = new String(bys);
            //
            String str = new String(bys, 0, len);
            System.out.println(str);
        }

    }


    @Test
    public void test1() throws IOException {
        InputStream is = new FileInputStream("file\\note.txt");

        // 读取数据
        /*
        int read()一次读取一个字节, 如果读取到了末尾, 返回-1
         */
//        char c = (char) is.read();
//        System.out.println(c);

//        c = (char) is.read();
//        System.out.println(c);

//        System.out.println(is.read());

        int data;
        // 先读取文件字节, 赋值给data, 再用data和 -1 进行比较
        // while判断值 data和 -1比较的值
        // 如果有中文, 会乱码
        while ((data = is.read()) != -1) {
            System.out.print((char) data);
        }

    }
}
